'use strict';
module.exports = {
	/**
	 * 公众号推送入口
	 * @url client/mp/pub/index 前端调用的url参数地址
	 * data 请求参数
	 */
	main: async (event) => {
		let {
			data = {}, userInfo, util, originalParam
		} = event;
		let {
			customUtil,
			config,
			pubFun,
			vk,
			db,
			_
		} = util;
		let {
			uid
		} = data;
		let res = {
			code: 0,
			msg: "",
			data: {}
		};
		// 业务逻辑开始-----------------------------------------------------------
		// 所有的逻辑都在这里写
		// 比如上边写到的
		let timestamp = new Date().getTime(); // uniCloud中尽量使用毫秒时间戳

		// 判断数据库中是否有未过期的token
		// 此时这张表未创建也不影响
		let oldAccessToken = await vk.baseDao.selects({
			dbName: "wx-mp-cache",
			getOne: true,
			getMain: true,
			// 主表where条件
			whereJson: {
				name: 'accessToken'
			},
			sortArr: [{
				name: 'expire_time',
				type: 'desc'
			}]
		});

		// 判断是否过期
		if (vk.pubfn.isNotNull(oldAccessToken) && oldAccessToken.expire_time > timestamp) {
			// 未过期直接返回
			res.msg = '请求成功'
			res.data = {
				token: oldAccessToken.token,
				expire_time: oldAccessToken.expire_time
			};
			return res
		}

		// 重新获取access_token
		// 这里就用到了固定出口的代理请求方法，就是第0节中添加到白名单的那些
		let accessTokenRes = await uniCloud.httpProxyForEip.get('https://api.weixin.qq.com/cgi-bin/token', {
			grant_type: 'client_credential',
			appid: 'wx6954444f473c9626', // 换成你自己的
			secret: '3f5f375fb5c147818697b80cc23f7328' // 换成你自己的
		});
		// 这里必须parse

		// 把新的token缓存下来
		let newExpireTime = parseInt(timestamp) + 7200000
		await vk.baseDao.add({
			dbName: "wx-mp-cache",
			dataJson: {
				name: 'accessToken',
				token: accessTokenRes.body.access_token, // 注意看这里，代理请求的结果，数据是在body中……
				expire_time: newExpireTime // 2小时过期
			}
		});

		// 返回
		let accessTokenInfo = {
			token: accessTokenRes.body.access_token,
			expire_time: newExpireTime
		};
		res.msg = '请求成功'
		res.data = accessTokenInfo

		// 业务逻辑结束-----------------------------------------------------------
		return res;
	}
}